[ykj_id].vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <template>
  2. <div class="stu_stfx">
  3. <NavHeader />
  4. <bread-crumb />
  5. <div class="w-1200px m-auto min-h-650px flex flex-row justify-between">
  6. <div class="w-188px h-full" style="background-color: #fff;">
  7. <leftSiderStu :StuLeftMenuNum="StuLeftMenuNum" :ykjId="ykjId" />
  8. </div>
  9. <div class="w-1012px p-12 blueBg">
  10. <div class="w-full min-h-500px flex flex-row flex-wrap">
  11. <div class="w-1/4 text-center mb-8 cursor-pointer singlePart" v-for="(item, index) in imgArr" :key="index"
  12. @click="clickCurrent(item.allFullExamsJ)">
  13. <div class="p-4 picIn">
  14. <img :src=prefixedUrl+item.thumbImg alt="" />
  15. </div>
  16. <p>{{ item.examTitle }}</p>
  17. </div>
  18. </div>
  19. <div class="demo-pagination-block">
  20. <el-pagination v-model:current-page="currentPage" v-model:page-size="pageSize4"
  21. :page-sizes="[12, 12*2, 12*3, 12*4,12*5]" :small="small" :disabled="disabled" background
  22. layout="total, sizes, prev, pager, next, jumper" :total="totalNum" @size-change="handleSizeChange"
  23. @current-change="handleCurrentChange" style="justify-content: right;" />
  24. </div>
  25. </div>
  26. </div>
  27. <!-- dialog弹出框 -->
  28. <el-dialog v-model="dialogVisible" title="试卷预览" width="70%">
  29. <span class="dialogShow">
  30. <swiper :slidesPerView="1" :spaceBetween="30" :loop="true" :centeredSlides="true"
  31. :pagination="{ clickable: true }" :autoplay="{
  32. delay: 2500,
  33. disableOnInteraction: false
  34. }" :navigation="true" :modules="modules" class="mySwiper">
  35. <swiper-slide class="mainSwiper" v-for="(secItem, ind) in dialogShow" :key="ind">
  36. <img :src=prefixedUrl+secItem >
  37. </swiper-slide>
  38. </swiper>
  39. </span>
  40. </el-dialog>
  41. <commonFooter />
  42. </div>
  43. </template>
  44. <route lang="json">
  45. {
  46. "meta": {
  47. "title": "考试分析",
  48. "breadcrumb": true
  49. }
  50. }
  51. </route>
  52. <script lang="ts" setup>
  53. import { useRouter } from "vue-router";
  54. import { student_wdsj_list } from "@/pages/ksfx/apiItem";
  55. import {user} from "~/store";
  56. const route = useRoute();
  57. import { Swiper, SwiperSlide } from 'swiper/vue'; // swiper所需组件
  58. // 这是分页器和对应方法,swiper好像在6的时候就已经分离了分页器和一些其他工具
  59. import { Autoplay, Navigation, Pagination, A11y } from 'swiper';
  60. // 引入swiper样式,对应css 如果使用less或者css只需要把scss改为对应的即可
  61. import 'swiper/css';
  62. import 'swiper/css/navigation';
  63. import 'swiper/css/pagination';
  64. //默认滑动效果(这里面注释掉的可以不要)
  65. // const onSwiper = swiper => {
  66. // console.log(swiper);
  67. // };
  68. // const onSlideChange = e => {
  69. // // swiper切换的时候执行的方法
  70. // console.log('slide change', e.activeIndex);
  71. // };
  72. // setup语法糖只需要这样创建一个变量就可以正常使用分页器和对应功能,如果没有这个数组则无法使用对应功能
  73. const modules = [Autoplay, Pagination, Navigation, A11y];
  74. let StuLeftMenuNum = 1;
  75. const imgArr = ref([]);
  76. const dialogVisible = ref(false)
  77. const dialogShow = ref([]);
  78. const prefixedUrl =ref(window.GLOBAL_CONFIG.yzy);
  79. const ykjId = ref();
  80. ykjId.value = route.params.ykj_id;
  81. const small = ref(false)
  82. const disabled = ref(false)
  83. const currentPage = ref(1)
  84. const pageSize4 = ref(12)
  85. const totalNum = ref();
  86. onMounted(() => {
  87. initData()
  88. })
  89. const initData = () => {
  90. let transObj = {
  91. page:currentPage.value,
  92. limit:pageSize4.value,
  93. jh_id:route.params.ykj_id,
  94. }
  95. student_wdsj_list(transObj)
  96. .then(res => {
  97. if (res.code == "1") {
  98. imgArr.value = res.data.data.page_data;
  99. currentPage.value = res.data.data.page_now;
  100. pageSize4.value = 12;
  101. totalNum.value = Number(res.data.data.total_rows);
  102. }
  103. })
  104. .catch(error => { console.log(error) });
  105. }
  106. // 点击单独试卷弹出(dialog弹出)
  107. const clickCurrent = (item) => {
  108. dialogVisible.value = true;
  109. dialogShow.value = item;
  110. }
  111. const handleSizeChange = (val: number) => {
  112. console.log(`${val} items per page`);
  113. pageSize4.value = val;
  114. initData();
  115. }
  116. const handleCurrentChange = (val: number) => {
  117. console.log(`current page: ${val}`)
  118. currentPage.value = val;
  119. initData();
  120. }
  121. </script>
  122. <style scoped>
  123. @import '@/styles/ksfx.css';
  124. :deep(.el-pagination.is-background .el-pager li.is-active){
  125. background-color:#0148E5;
  126. }
  127. .mainSwiper {
  128. text-align: center;
  129. }
  130. .mainSwiper img {
  131. display: inline-block;
  132. }
  133. .dialogShow img {
  134. width: 100%;
  135. display: inline-block;
  136. }
  137. .picIn img {
  138. width: 100%;
  139. height: 100%;
  140. }
  141. .demo-pagination-block + .demo-pagination-block {
  142. margin-top: 10px;
  143. }
  144. .demo-pagination-block .demonstration {
  145. margin-bottom: 16px;
  146. }
  147. </style>